package com.ynet.middleground.contract.conf;

import org.dozer.DozerConverter;

/**
 * 项目名：ifp-contract <br>
 * 包名：com.ynet.middleground.contract.conf <br>
 * 类名：BooleanIntegerDozerConverter <br>
 * 描述：
 * 
 * <pre>
 *  合约表中，is_deleted 字段本意为 boolean，但由于合约使用 is_deleted 字段增加了 2 这一属性值，用作 作废 含义。
 *  故防止后期 Contract 转为 ContractDto 类时候 Integer 无法转换为 Boolean 的错误，在 {@link dozer/dozer-mapping.xml:70}
 *  配置中，单独对类中的 isDeleted 属性转换时使用该类做适配
 * </pre>
 * 
 * @author liulx
 * @create 2022-02-10 16:19
 */
public class BooleanIntegerDozerConverter extends DozerConverter<Integer, Boolean> {

    public BooleanIntegerDozerConverter() {
        super(Integer.class, Boolean.class);
    }

    @Override
    public Boolean convertTo(Integer source, Boolean destination) {
        return null != source && source == 0;
    }

    @Override
    public Integer convertFrom(Boolean source, Integer destination) {
        if (Boolean.TRUE.equals(source)) {
            return 1;
        } else if (Boolean.FALSE.equals(source)) {
            return 0;
        }
        throw new IllegalStateException("Unknown value!");
    }

}
